/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOFacturaProforma;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioFacturaProforma;
import pe.com.cotelasa.scp.entidad.Cotizacion;
import pe.com.cotelasa.scp.entidad.FacturaProforma;

/**
 *
 * @author usuario
 */
@Service
public class ServicioFacturaProformaImpl implements IServicioFacturaProforma, Serializable {

    private static final long serialVersionUID = -3899534497036527683L;
    @Inject
    private IDAOFacturaProforma daoFacturaProforma;

    @Override
    public Collection<FacturaProforma> listarFacturaProformasActivos() throws ServiceException {
        try {
            return daoFacturaProforma.listarActivos(FacturaProforma.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public FacturaProforma conseguirFacturaProformaPorId(Integer idFacturaProforma) throws ServiceException {
        try {
            return daoFacturaProforma.obtenerEntidadPorId(FacturaProforma.class, idFacturaProforma);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio guardarFacturaProforma(FacturaProforma facturaProforma) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            //facturaProforma.setId(5);
            facturaProforma.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            daoFacturaProforma.insertar(facturaProforma);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio actualizarFacturaProforma(FacturaProforma facturaProforma) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoFacturaProforma.actualizar(facturaProforma);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Collection<FacturaProforma> listarFacturaProformasPorFiltro(FacturaProforma facturaProforma) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            if (facturaProforma.getIdCliente() != null) {
                parametro.put("idCliente", facturaProforma.getIdCliente().getId());
            }
            parametro.put("codigoProforma", facturaProforma.getCodigoProforma());
            parametro.put("estadoProforma", facturaProforma.getEstadoProforma());
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return daoFacturaProforma.obtenerColeccionEntidadPorFiltros(FacturaProforma.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<FacturaProforma> buscarFacturaProformasPorFiltro(FacturaProforma facturaProforma, Date fechaInicio, Date fechaFin) throws ServiceException {
        try {

            return daoFacturaProforma.buscarFacturasProformaPorFiltro(facturaProforma, fechaInicio, fechaFin);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }

    }

    @Override
    public FacturaProforma conseguirFacturaProformaPorCodigo(FacturaProforma facturaProforma) throws ServiceException {
        try {
            return daoFacturaProforma.conseguirFacturaProformaPorCodigo(facturaProforma);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public FacturaProforma obtenerFPPorCodigo(String codigoFacturaProforma) throws ServiceException {
        try {
            return daoFacturaProforma.obtenerFPPorCodigo(codigoFacturaProforma);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<FacturaProforma> listarFacturaProformasAprobadosPorTipo(FacturaProforma facturaProforma) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("tipoFp", (char) facturaProforma.getTipoFP());
            parametro.put("estadoProforma", "A");
            parametro.put("idEmpresa", facturaProforma.getIdEmpresa().getId());
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return daoFacturaProforma.obtenerColeccionEntidadPorFiltros(FacturaProforma.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
}
